package cn.demoncat.util.lang.entity.report;

import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.annotation.JSONField;

/**
 * 报表数据 - 多维度 - 分时:{维度:统计}
 * 
 * {category,value,legend[itemTitle]}
 * 
 * @author 延晓磊
 *
 * @since 2020年7月9日
 */
public class ReportDataTimeCounts extends ReportDataTime{
	 
	/**
	 * 维度说明
	 * 
	 * 值：[items]
	 */
	private List<String> legend = new ArrayList<>();
	
	/**
	 * 数据
	 * 
	 * 值：{item:[count]}
	 */
	private Map<String, List<Long>> value = new LinkedHashMap<>();

	/**
	 * 数据长度
	 * 
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2020年7月14日
	 */
	public int size() {
		return this.value.get(legend.get(0)).size();
	}
	
	/**
	 * 构建
	 * 
	 * @param items		维度项
	 * 
	 * @author 延晓磊
	 *
	 * @since 2020年7月9日
	 */
	public ReportDataTimeCounts(Collection<String> items) {
		super();
		for (String item : items) {
			// 维度说明
			legend.add(item);
			// 维度数据
			value.put(item, new ArrayList<>());
		}
	}

	/**
	 * 添加数据
	 * 
	 * @param legend
	 * @param value		数据
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2020年7月13日
	 */
	public ReportDataTimeCounts add(String legend, Long value) {
		this.value.get(legend).add(value);
		return this;
	}
	
	/**
	 * 设置数据
	 * 
	 * @param legend
	 * @param i			索引
	 * @param value		数据
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2020年7月13日
	 */
	public ReportDataTimeCounts add(String legend, int i, Long value) {
		this.value.get(legend).set(i, value);
		return this;
	}
	
	/**
	 * 维度
	 * 
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2020年7月9日
	 */
	public List<String> getLegend() {
		return legend;
	}
	
	/**
	 * 维度
	 * 
	 * @author 延晓磊
	 *
	 * @since 2020年7月9日
	 */
	public void setLegend(List<String> legend) {
		this.legend = legend;
	}

	/**
	 * 数据
	 * 
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2020年7月9日
	 */
	public Map<String, List<Long>> getValue() {
		return value;
	}

	/**
	 * 数据
	 * 
	 * @author 延晓磊
	 *
	 * @since 2020年7月9日
	 */
	public void setValue(Map<String, List<Long>> value) {
		this.value = value;
	}

	/**
	 * 获取维度数据
	 * 
	 * @param legend
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2020年7月9日
	 */
	@JSONField(serialize=false,deserialize=false)
	public List<Long> getValues(String legend){
		return value.get(legend);
	}
	
	/**
	 * 获取数据
	 * 
	 * @param legend
	 * @param i
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2020年7月9日
	 */
	@JSONField(serialize=false,deserialize=false)
	public Long getValue(String legend, int i){
		return value.get(legend).get(i);
	}
}
